// axios基础的封装
import axios from "axios";

// elementPlus消息提示框
import { ElMessage } from "element-plus";
import "element-plus/theme-chalk/el-message.css";

import { useUserStore } from "@/stores/user";
import router from "@/router/index";

// 封装axios -- 创建实例
const httpInstance = axios.create({
  // 基础路径 -- 默认会加在url前面 -- 根域名
  baseURL: "http://pcapi-xiaotuxian-front.itheima.net",
  // 超时时间
  timeout: 5000,
});

// axios添加请求拦截器
httpInstance.interceptors.request.use(
  (config) => {
    // 拦截请求成功的回调函数
    // 1. 从pinia中获取token
    const userStore = useUserStore();
    // 2. 按照后端的要求拼接token数据
    const token = userStore.userInfo.token;
    if (token) {
      // 在请求头中携带token -- 格式为：名称 值 [Authorization， Bearer token值]
      config.headers.Authorization = `Bearer ${token}`;
    }
    return config;
  },
  (e) => Promise.reject(e)
);

// axios添加响应拦截器
httpInstance.interceptors.response.use(
  (res) => {
    return res.data;
  },
  (e) => {
    // 统一错误提示
    ElMessage({ type: "error", message: e.response.data.message, plain: true });

    // 401 token失效处理
    if (e.response.status === 401) {
      // 1. 清除本地用户数据
      const userStore = useUserStore();
      userStore.logout();
      // 2. 跳转到登录页
      router.push("/login");
    }
    return Promise.reject(e);
  }
);

export default httpInstance;
